package com.guanzhi.creation.singleton;

/**
 * 设计模式
 * <p> Package: com.guanzhi.creation.singleton </p>
 * <p> File: EagerSingleton.java </p>
 * <p> Description:  (创建型模式-单例模式-懒汉式)</p>
 * <p> Date: 2024/4/11 23:04</p>
 *
 * @author 观之
 * @version 1.0 （代码版本）
 * @email <a href="mailto:guanzhi55634@aliyun.com">观之</a>（邮箱）
 * @date 2024/4/11 23:04
 * @since jdk17（jdk版本）
 */
public class LazySingleton {
    /**
     * 1。静态私有变量
     */
    private static LazySingleton lazySingleton;

    /**
     * 2.私有构造函数
     * 私有构造函数，防止外部通过new EagerSingleton()来创建实例
     */
    private LazySingleton() {
    }

    /**
     * 3.提供全局访问点来获取该实例
     */
    public static LazySingleton getInstance() {
        // 1.第一次调用时，初始化实例
        // 在多线程的访问下可能会创建多个实例,会导致线程及其不安全,需要引入双重检查锁用来保证线程安全。
        // 同时引入双重检查锁会降低性能。
        if (lazySingleton == null) {
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
}
